Terraform Registry に CDK for Terraform のドキュメントが追加されました!
こんにちは! AWS 事業本部コンサルティング部のたかくに(@takakuni_)です。
みなさん、 CDK for Terraform 使っていますでしょうか? 私は最近使い始めました。
ついに、 Terraform Registry が Multi-language provider docs に対応しました。このアップデートにより、 Terraform Registry(Terraform でリソース作る時にいつもみるドキュメント)に CDK for Terraform だったらどう書くのかが追加されました!
まとめ
忙しい人向けの先にまとめです。
- CDK の世界でいう L1 コンストラクトのドキュメントが追加
- 現在は TypeScript, Python の 2 言語のみサポート
- 現段階では一部リソースのみサポートされている
- AWS Provider の中の EC2, Lambda, VPC, and EKS
- Terraform Cloud/Enterprise プロバイダ
AWS Provider でサポートされているリソース一覧(2023/6/25 現在)
Resource ブロック
- aws_ec2_availability_zone_group
- aws_ec2_capacity_reservation
- aws_ec2_carrier_gateway
- aws_ec2_client_vpn_authorization_rule
- aws_ec2_client_vpn_endpoint
- aws_ec2_client_vpn_network_association
- aws_ec2_client_vpn_route
- aws_ec2_fleet
- aws_ec2_host
- aws_ec2_instance_state
- aws_ec2_local_gateway_route
- aws_ec2_local_gateway_route_table_vpc_association
- aws_ec2_managed_prefix_list
- aws_ec2_managed_prefix_list_entry
- aws_ec2_network_insights_analysis
- aws_ec2_network_insights_path
- aws_ec2_serial_console_access
- aws_ec2_subnet_cidr_reservation aws_ec2_tag
- aws_ec2_traffic_mirror_filter
- aws_ec2_traffic_mirror_filter_rule
- aws_ec2_traffic_mirror_session
- aws_ec2_traffic_mirror_target
- aws_ec2_transit_gateway
- aws_ec2_transit_gateway_connect
- aws_ec2_transit_gateway_connect_peer
- aws_ec2_transit_gateway_multicast_domain
- aws_ec2_transit_gateway_multicast_domain_association
- aws_ec2_transit_gateway_multicast_group_member
- aws_ec2_transit_gateway_multicast_group_source
- aws_ec2_transit_gateway_peering_attachment
- aws_ec2_transit_gateway_peering_attachment_accepter
- aws_ec2_transit_gateway_policy_table
- aws_ec2_transit_gateway_policy_table_association
- aws_ec2_transit_gateway_prefix_list_reference
- aws_ec2_transit_gateway_route
- aws_ec2_transit_gateway_route_table
- aws_ec2_transit_gateway_route_table_association
- aws_ec2_transit_gateway_route_table_propagation
- aws_ec2_transit_gateway_vpc_attachment
- aws_ec2_transit_gateway_vpc_attachment_accepter
- aws_eks_addon
- aws_eks_cluster
- aws_eks_fargate_profile
- aws_eks_identity_provider_config
- aws_eks_node_group
- aws_instance
- aws_lambda_alias
- aws_lambda_code_signing_config
- aws_lambda_event_source_mapping
- aws_lambda_function
- aws_lambda_function_event_invoke_config
- aws_lambda_function_url
- aws_lambda_invocation
- aws_lambda_layer_version
- aws_lambda_layer_version_permission
- aws_lambda_permission
- aws_lambda_provisioned_concurrency_config aws_vpc
- aws_vpc_dhcp_options
- aws_vpc_dhcp_options_association
- aws_vpc_endpoint
- aws_vpc_endpoint_connection_accepter
- aws_vpc_endpoint_connection_notification
- aws_vpc_endpoint_policy
- aws_vpc_endpoint_route_table_association
- aws_vpc_endpoint_security_group_association
- aws_vpc_endpoint_service
- aws_vpc_endpoint_service_allowed_principal
- aws_vpc_endpoint_subnet_association
- aws_vpc_ipam
- aws_vpc_ipam_organization_admin_account
- aws_vpc_ipam_pool
- aws_vpc_ipam_pool_cidr
- aws_vpc_ipam_pool_cidr_allocation
- aws_vpc_ipam_preview_next_cidr
- aws_vpc_ipam_resource_discovery
- aws_vpc_ipam_resource_discovery_association
- aws_vpc_ipam_scope
- aws_vpc_ipv4_cidr_block_association
- aws_vpc_ipv6_cidr_block_association
- aws_vpc_network_performance_metric_subscription
- aws_vpc_peering_connection
- aws_vpc_peering_connection_accepter
- aws_vpc_peering_connection_options
- aws_vpc_security_group_egress_rule
- aws_vpc_security_group_ingress_rule
- aws_vpclattice_access_log_subscription
- aws_vpclattice_auth_policy
- aws_vpclattice_listener
- aws_vpclattice_listener_rule
- aws_vpclattice_resource_policy
- aws_vpclattice_service
- aws_vpclattice_service_network
- aws_vpclattice_service_network_service_association
- aws_vpclattice_service_network_vpc_association
- aws_vpclattice_target_group
- aws_vpclattice_target_group_attachment
Data ブロック
- aws_ec2_client_vpn_endpoint
- aws_ec2_coip_pool
- aws_ec2_coip_pools
- aws_ec2_host
- aws_ec2_instance_type
- aws_ec2_instance_type_offering
- aws_ec2_instance_type_offerings
- aws_ec2_instance_types
- aws_ec2_local_gateway
- aws_ec2_local_gateway_route_table
- aws_ec2_local_gateway_route_tables
- aws_ec2_local_gateway_virtual_interface
- aws_ec2_local_gateway_virtual_interface_group
- aws_ec2_local_gateway_virtual_interface_groups
- aws_ec2_local_gateways
- aws_ec2_managed_prefix_list
- aws_ec2_managed_prefix_lists
- aws_ec2_network_insights_analysis
- aws_ec2_network_insights_path
- aws_ec2_public_ipv4_pool
- aws_ec2_public_ipv4_pools
- aws_ec2_serial_console_access
- aws_ec2_spot_price
- aws_ec2_transit_gateway
- aws_ec2_transit_gateway_attachment
- aws_ec2_transit_gateway_attachments
- aws_ec2_transit_gateway_connect
- aws_ec2_transit_gateway_connect_peer
- aws_ec2_transit_gateway_dx_gateway_attachment
- aws_ec2_transit_gateway_multicast_domain
- aws_ec2_transit_gateway_peering_attachment
- aws_ec2_transit_gateway_route_table
- aws_ec2_transit_gateway_route_table_associations
- aws_ec2_transit_gateway_route_table_propagations
- aws_ec2_transit_gateway_route_tables
- aws_ec2_transit_gateway_vpc_attachment
- aws_ec2_transit_gateway_vpc_attachments
- aws_ec2_transit_gateway_vpn_attachment
- aws_eks_addon
- aws_eks_addon_version
- aws_eks_cluster
- aws_eks_cluster_auth
- aws_eks_clusters
- aws_eks_node_group
- aws_eks_node_groups
- aws_lambda_alias
- aws_lambda_code_signing_config
- aws_lambda_function
- aws_lambda_function_url
- aws_lambda_functions
- aws_lambda_invocation
- aws_lambda_layer_version
- aws_vpc
- aws_vpc_dhcp_options
- aws_vpc_endpoint
- aws_vpc_endpoint_service
- aws_vpc_ipam_pool
- aws_vpc_ipam_pool_cidrs
- aws_vpc_ipam_pools
- aws_vpc_ipam_preview_next_cidr
- aws_vpc_peering_connection
- aws_vpc_peering_connections
- aws_vpc_security_group_rule
- aws_vpc_security_group_rules
- aws_vpclattice_auth_policy
- aws_vpclattice_listener
- aws_vpclattice_resource_policy
- aws_vpclattice_service
- aws_vpclattice_service_network
- aws_vpcs
GitHub から追いました!
何が良くなったのか
これまで、 L1 コンストラクタで作成する際にプロパティをどうやって確認していたかというと、 Construct Hub や、lib の index.d.ts
を見たり、慣れてくると HCL のキャメルケースバージョンだな..? と予測して、プロパティを設定していく流れでした。 余談ですが私は最近、 Amazon CodeWhisperer に大変お世話になっています。
今回のアップデートで、 Terraform Registry に CDK for Terraform のドキュメントが反映され、一元化できるようになってきました!(ここ大事)
見てみる
以下は実際のドキュメントを眺めてみた結果です。新しく「Multi-language provider docs」と記載があり、Terraform (HCL) の他に、TypeScript
, Python
が選択できるようになっています。
言語を選択すると、 Example Usage
として幾つかサンプルコードと、定義するプロパティの説明が記載されています。
対応していないドキュメント
対応していないドキュメントみると、「This page is not yet translated to TypeScript. The Terraform (HCL) version is shown instead.」と記載がありました。
気長に待つか、 hashicorp/terraform-provider-aws に Pull Request してみるのもいいかもしれません。
まとめ
AWS CDK と比べ、まだまだ発展途中ではありますが、一歩ずつ着実に進化を遂げている CDK for Terraform です。今後のさらなる展望に期待しながら、ガンガン触っていきたいと思います。
以上、AWS 事業本部コンサルティング部のたかくに(@takakuni_)でした!